home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d1
/
eddtv4.arc
/
EDSHOWDP.ASM
< prev
next >
Wrap
Assembly Source File
|
1988-03-28
|
20KB
|
465 lines
PAGE 78,120
TITLE OèÄ EDDT - EXTENDED DRIVE DESCRIPTION TABLESö
SUBTTL Display Current Drive Parameters program
.286
PAGE_0 SEGMENT AT 0 ; DEFINE LOW MEMORY
ORG 041H*4 ; SKIP TO DRIVE 0 VECTOR
ED_DRIV0 DD ? ; DRIVE 0 PARAMETER VECTOR
ORG ED_DRIV0 ; REDEFINE VECTOR
ED_D0OFF DW ? ; DRIVE 0 VECTOR OFFSET
ED_D0SEG DW ? ; DRIVE 0 VECTOR SEGMENT
ORG 046H*4 ; SKIP TO DRIVE 0 VECTOR
ED_DRIV1 DD ? ; DRIVE 1 PARAMETER VECTOR
ORG ED_DRIV1 ; REDEFINE VECTOR
ED_D1OFF DW ? ; DRIVE 1 VECTOR OFFSET
ED_D1SEG DW ? ; DRIVE 1 VECTOR SEGMENT
PAGE_0 ENDS ; END OF SEGMENT
;-----------------------------------------------------------------------
; ROM BIOS DATA AREAS
;-----------------------------------------------------------------------
DATA SEGMENT AT 40H
RS232_BASE DW 4 DUP(?) ; ADDRESSES OF RS232 ADAPTERS
PRINTER_BASE DW 4 DUP(?) ; ADDRESSES OF PRINTERS
EQUIP_FLAG DW ? ; INSTALLED HARDWARE
MFG_TST DB ? ; INITIALIZATION FLAG
MEMORY_SIZE DW ? ; MEMORY SIZE IN K BYTES
MFG_ERR_FLAG DB ? ; SCRATCH PAD FOR MANUFACTURING
DB ? ; ERROR CODES
;-----------------------------------------------------------------------
; KEYBOARD DATA AREAS
;-----------------------------------------------------------------------
KB_FLAG DB ? ; KEYBOARD STATUS
KB_FLAG_1 DB ? ; SECOND BYTE OF KEYBOARD STATUS
ALT_INPUT DB ? ; STORAGE FOR ALTERNATE KEYPAD ENTRY
;
; ----- SHIFT FLAG EQUATES WITHIN KB_FLAG
;
INS_STATE EQU 80H ; INSERT SATE IS ACTIVE
CAPS_STATE EQU 40H ; CAPS LOCK STATE HAS BEEN TOGGLED
NUM_STATE EQU 20H ; NUM LOCK STATE HAS BEEN TOGGLED
SCROLL_STATE EQU 10H ; SCROLL LOCK STATE HAS BEEN TOGGLED
ALT_SHIFT EQU 08H ; ALTERNATE SHIFT KEY DEPRESSED
CTL_SHIFT EQU 04H ; CONTROL SHIFT KEY DEPRESSED
LEFT_SHIFT EQU 02H ; LEFT SHIFT KEY DEPRESSED
RIGHT_SHIFT EQU 01H ; RIGHT SHIFT KEY DEPRESSED
ORG 001AH ; ORG TO KEYBOARD BUFFER
BUFFER_HEAD DW ? ; POINTER TO HEAD OF KEYBOARD BUFFER
BUFFER_TAIL DW ? ; POINTER TO TAIL OF KEYBOARD BUFFER
KB_BUFFER DW 16 DUP(?) ; ROOM FOR 15 ENTRIES
ORG 0049H ; ORG TO START OF DISPLAY DATA
;-----------------------------------------------------------------------
; VIDEO DISPLAY DATA AREA
;-----------------------------------------------------------------------
CRT_MODE DB ? ; CURRENT CRT MODE
CRT_COLS DW ? ; NUMBER OF COLS ON SCREEN
CRT_LEN DW ? ; LENGTH OF REGEN IN BYTES
CRT_START DW ? ; STARTING ADDRESS IN REGEN BUFFER
CURSOR_POSN DW 8 DUP(?) ; CURSOR FOR EACH OF UP TO 8 PAGES
CURSOR_MODE DW ? ; CURRENT CURSOR MODE SETTING
ACTIVE_PAGE DB ? ; CURRENT PAGE BEING DISPLAYED
ADDR_6845 DW ? ; BASE ADDRESS FOR ACTIVE DISPLAY CARD
CRT_MODE_SET DB ? ; CURRENT SETTING OF THE 3X8 REGISTER
CRT_PALETTE DB ? ; CURRENT PALETTE SETTING COLOR CARD
;-----------------------------------------------------------------------
; POST AND BIOS WORK DATA AREA
;-----------------------------------------------------------------------
IO_ROM_INIT DW ? ; PNTR TO OPTIONAL I/O ROM INIT ROUTINE
IO_ROM_SEG DW ? ; POINTER TO I/O ROM SEGMENT
INTR_FLAG DB ? ; FLAG TO INDICATE AN INTERRUPT HAPPENE
;-----------------------------------------------------------------------
; TIMER DATA AREA
;-----------------------------------------------------------------------
TIMER_LOW DW ? ; LOW WORD OF TIMER COUNT
TIMER_HIGH DW ? ; HIGH WORD OF TIMER COUNT
TIMER_OFL DB ? ; TIMER HAS ROLLED OVER SINCE READ
;-----------------------------------------------------------------------
; SYSTEM DATA AREA
;-----------------------------------------------------------------------
BIOS_BREAK DB ? ; BIT 7=1 IF BREAK KEY DEPRESSED
RESET_FLAG DW ? ; WORD=1234H IF KEYBOARD RESET
;-----------------------------------------------------------------------
; FIXED DISK DATA AREA
;-----------------------------------------------------------------------
DISK_STATUS1 DB ? ; FIXED DISK STATUS
HF_NUM DB ? ; COUNT OF FIXED DISKS
CONTROL_BYTE DB ? ; HEAD CONTROL BYTE
PORT_OFF DB ? ; RESERVED (PORT OFFSET)
;
ORG 0080H ; ORG TO START OF ADDITIONAL KB DATA
BUFFER_START DW ?
BUFFER_END DW ?
DATA ENDS
CSEG SEGMENT PARA PUBLIC 'CODE' ; IDENTIFY CODE SEGMENT
PAGE
INCLUDE EDDT_MAC.LIB
ASSUME CS:CSEG,DS:CSEG,ES:CSEG ; INITIAL ASSUMPTION
ORG 0100H ; SKIP OVER PSP
TST_START:
JMP TST_GO
ED_DPRM1 EQU $
DFLD 01,30,07,'FIXED DRIVE PARAMETERS'
ED_DPRM2 EQU $
DFLD 03,44,07,'Drive 0 Drive 1'
ED_DPRM3 EQU $
DFLD 04,18,07,'Cylinders 0000D 0000D'
ED_DPRM4 EQU $
DFLD 05,18,07,'Heads 00D 00D'
ED_DPRM5 EQU $
DFLD 06,18,07,'Write Pre-Compensation 0000H 0000H'
ED_DPRM6 EQU $
DFLD 07,18,07,'Control Byte 00H 00H'
ED_DPRM7 EQU $
DFLD 08,18,07,'Landing Zone 0000D 0000D'
ED_DPRM8 EQU $
DFLD 09,18,07,'Sectors/Track 00D 00D'
ED_WORKA DB ' '
ED_HD0PM DB 16 DUP(0)
ED_HD1PM DB 16 DUP(0)
ED_INVM1 EQU $
DFLD 10,28,15,'INVALID MACHINE DETECTED'
ED_INVM2 EQU $
DFLD 24,20,15,'SETUP MUST BE RUN ON AN AT OR COMPATIBLE'
TST_GO:
;
; ----- MAKE SURE WE'RE RUNNING ON AN AT
;
MOV AX,0FFFFH ; GET LAST SEGMENT ADDRESS
MOV ES,AX ; IN ES REGISTER
MOV AL,ES:[0EH] ; GET MODEL_BYTE
CMP AL,0FCH ; GOOD AT TYPE ?
JE ED_MODOK ; ...YES - CONTINUE
CMP AL,0FBH ; GOOD AT TYPE ?
JE ED_MODOK ; ...YES - CONTINUE
CLS ; CLEAR THE SCREEN
;
WCS ED_INVM1 ; WRITE ERROR MESSAGE 1
;
WCS ED_INVM2 ; WRITE ERROR MESSAGE 2
;
MOV AH,4CH ; RETURN TO CALLER
INT 21H
ED_MODOK:
MOV AX,0 ; ZERO AX
MOV DS,AX ; AND SET DS TO PAGE 0
LDS SI,ED_DRIV0 ; GET OFFSET/SEGMENT DRIVE 0 DATA
LEA DI,ED_HD0PM ; GET OFFSET OUR AREA
PUSH CS ; CS TO STACK
POP ES ; GET SEGMENT OF OUR AREA
MOV CX,16/2 ; GET LENGTH OF DATA
REP MOVSW ; AND MOVE IT
;
MOV AX,0 ; ZERO AX
MOV DS,AX ; AND SET DS TO PAGE 0
LDS SI,ED_DRIV1 ; GET OFFSET/SEGMENT DRIVE 0 DATA
LEA DI,ED_HD1PM ; GET OFFSET OUR AREA
MOV CX,16/2 ; GET LENGTH OF DATA
REP MOVSW ; AND MOVE IT
PUSH CS ; CS TO STACK
POP DS ; DS OFF
PUSH CS ; CS TO STACK
POP ES ; ES OFF STACK
;
CLS
;
; ----- LIST THE DRIVE PARAMETERS ON THE SCREEN
;
ED_LDP PROC NEAR ; DEFINE PROCEDURE
;
WCS ED_DPRM1,,CS ; WRITE DISK PARM TABLE MESSAGE
;
WCS ED_DPRM2,,CS ; WRITE DISK PARM TABLE MESSAGE
;
WCS ED_DPRM3,,CS ; WRITE DISK PARM TABLE MESSAGE
;
WCS ED_DPRM4,,CS ; WRITE DISK PARM TABLE MESSAGE
;
WCS ED_DPRM5,,CS ; WRITE DISK PARM TABLE MESSAGE
;
WCS ED_DPRM6,,CS ; WRITE DISK PARM TABLE MESSAGE
;
WCS ED_DPRM7,,CS ; WRITE DISK PARM TABLE MESSAGE
;
WCS ED_DPRM8,,CS ; WRITE DISK PARM TABLE MESSAGE
;
; ----- WRITE PARMS FOR DRIVE 0 --------------------------------
;
; ----- GET THE NUMBER OF CYLINDERS
;
MOV AX,WORD PTR ED_HD0PM+00 ; GET NUMBER OF CYLS
;
; ----- CONVERT NUMBER OF CYLS TO DECIMAL ASCII & PRINT
;
CALL ED_CVDA ; CONVERT TO ASCII
;
MOV AH,0FH ; REQUEST CURRENT VIDEO MODE
INT 10H ; RUPT TO BIOS
;
LEA BP,ED_WORKA ; ES:BP POINT TO WORK AREA
MOV DX,042DH ; SET ROW/COL
MOV CX,4 ; LENGTH OF STRING
MOV BL,07H ; WRITE ATTRIBUTE
MOV AX,1300H ; WRITE CHARACTER STRING REQUEST
INT 10H ; RUPT TO BIOS
;
; ----- GET THE NUMBER OF HEADS
;
MOV AL,BYTE PTR ED_HD0PM+02 ; GET NUMBER OF HEADS
MOV AH,0 ; ZERO AH
;
; ----- CONVERT NUMBER OF HEADS TO DECIMAL ASCII & PRINT
;
CALL ED_CVDA ; CONVERT TO ASCII
;
MOV AH,0FH ; REQUEST CURRENT VIDEO MODE
INT 10H ; RUPT TO BIOS
;
LEA BP,ED_WORKA+2 ; ES:BP POINT TO WORK AREA
MOV DX,052FH ; SET ROW/COL
MOV CX,2 ; LENGTH OF STRING
MOV BL,07H ; WRITE ATTRIBUTE
MOV AX,1300H ; WRITE CHARACTER STRING REQUEST
INT 10H ; RUPT TO BIOS
;
; ----- GET THE WRITE PRE-COMP CYL
;
MOV AX,WORD PTR ED_HD0PM+05 ; GET PRE-COMP CYLS
;
; ----- CONVERT WRITE PRE-COMP TO HEX ASCII & PRINT
;
CALL ED_CVHA ; CONVERT TO ASCII
;
MOV AH,0FH ; REQUEST CURRENT VIDEO MODE
INT 10H ; RUPT TO BIOS
;
LEA BP,ED_WORKA ; ES:BP POINT TO WORK AREA
MOV DX,062DH ; SET ROW/COL
MOV CX,4 ; LENGTH OF STRING
MOV BL,07H ; WRITE ATTRIBUTE
MOV AX,1300H ; WRITE CHARACTER STRING REQUEST
INT 10H ; RUPT TO BIOS
;
; ----- GET THE CONTROL BYTE
;
MOV AX,WORD PTR ED_HD0PM+08 ; GET CONTROL BYTE
;
; ----- CONVERT CONTROL BYTE TO HEX ASCII & PRINT
;
CALL ED_CVHA ; CONVERT TO ASCII
;
MOV AH,0FH ; REQUEST CURRENT VIDEO MODE
INT 10H ; RUPT TO BIOS
;
LEA BP,ED_WORKA+3 ; ES:BP POINT TO WORK AREA
MOV DX,072FH ; SET ROW/COL
MOV CX,1 ; LENGTH OF STRING
MOV BL,07H ; WRITE ATTRIBUTE
MOV AX,1300H ; WRITE CHARACTER STRING REQUEST
INT 10H ; RUPT TO BIOS
;
; ----- GET THE LANDING ZONE
;
MOV AX,WORD PTR ED_HD0PM+12 ; GET LANDING ZONE
;
; ----- CONVERT LANDING ZONE TO DECIMAL ASCII & PRINT
;
CALL ED_CVDA ; CONVERT TO ASCII
;
MOV AH,0FH ; REQUEST CURRENT VIDEO MODE
INT 10H ; RUPT TO BIOS
;
LEA BP,ED_WORKA ; ES:BP POINT TO WORK AREA
MOV DX,082DH ; SET ROW/COL
MOV CX,4 ; LENGTH OF STRING
MOV BL,07H ; WRITE ATTRIBUTE
MOV AX,1300H ; WRITE CHARACTER STRING REQUEST
INT 10H ; RUPT TO BIOS
;
; ----- GET SECTORS/TRACK
;
MOV AL,BYTE PTR ED_HD0PM+14 ; GET SECTORS/TRACK
MOV AH,0 ; CLEAR AH
;
; ----- CONVERT SECTORS/TRACK TO DECIMAL ASCII & PRINT
;
CALL ED_CVDA ; CONVERT TO ASCII
;
MOV AH,0FH ; REQUEST CURRENT VIDEO MODE
INT 10H ; RUPT TO BIOS
;
LEA BP,ED_WORKA+2 ; ES:BP POINT TO WORK AREA
MOV DX,092FH ; SET ROW/COL
MOV CX,2 ; LENGTH OF STRING
MOV BL,07H ; WRITE ATTRIBUTE
MOV AX,1300H ; WRITE CHARACTER STRING REQUEST
INT 10H ; RUPT TO BIOS
;
; ----- WRITE PARMS FOR DRIVE 1 --------------------------------
;
; ----- GET THE NUMBER OF CYLINDERS
;
MOV AX,WORD PTR ED_HD1PM+00 ; GET NUMBER OF CYLS
;
; ----- CONVERT NUMBER OF CYLS TO DECIMAL ASCII & PRINT
;
CALL ED_CVDA ; CONVERT TO ASCII
;
MOV AH,0FH ; REQUEST CURRENT VIDEO MODE
INT 10H ; RUPT TO BIOS
;
LEA BP,ED_WORKA ; ES:BP POINT TO WORK AREA
MOV DX,0439H ; SET ROW/COL
MOV CX,4 ; LENGTH OF STRING
MOV BL,07H ; WRITE ATTRIBUTE
MOV AX,1300H ; WRITE CHARACTER STRING REQUEST
INT 10H ; RUPT TO BIOS
;
; ----- GET THE NUMBER OF HEADS
;
MOV AL,BYTE PTR ED_HD1PM+02 ; GET NUMBER OF HEADS
MOV AH,0 ; ZERO AH
;
; ----- CONVERT NUMBER OF HEADS TO DECIMAL ASCII & PRINT
;
CALL ED_CVDA ; CONVERT TO ASCII
;
MOV AH,0FH ; REQUEST CURRENT VIDEO MODE
INT 10H ; RUPT TO BIOS
;
LEA BP,ED_WORKA+2 ; ES:BP POINT TO WORK AREA
MOV DX,053BH ; SET ROW/COL
MOV CX,2 ; LENGTH OF STRING
MOV BL,07H ; WRITE ATTRIBUTE
MOV AX,1300H ; WRITE CHARACTER STRING REQUEST
INT 10H ; RUPT TO BIOS
;
; ----- GET THE WRITE PRE-COMP CYL
;
MOV AX,WORD PTR ED_HD1PM+05 ; GET PRE-COMP CYLS
;
; ----- CONVERT WRITE PRE-COMP TO HEX ASCII & PRINT
;
CALL ED_CVHA ; CONVERT TO ASCII
;
MOV AH,0FH ; REQUEST CURRENT VIDEO MODE
INT 10H ; RUPT TO BIOS
;
LEA BP,ED_WORKA ; ES:BP POINT TO WORK AREA
MOV DX,0639H ; SET ROW/COL
MOV CX,4 ; LENGTH OF STRING
MOV BL,07H ; WRITE ATTRIBUTE
MOV AX,1300H ; WRITE CHARACTER STRING REQUEST
INT 10H ; RUPT TO BIOS
;
; ----- GET THE CONTROL BYTE
;
MOV AX,WORD PTR ED_HD1PM+08 ; GET CONTROL BYTE
;
; ----- CONVERT CONTROL BYTE TO HEX ASCII & PRINT
;
CALL ED_CVHA ; CONVERT TO ASCII
;
MOV AH,0FH ; REQUEST CURRENT VIDEO MODE
INT 10H ; RUPT TO BIOS
;
LEA BP,ED_WORKA+3 ; ES:BP POINT TO WORK AREA
MOV DX,073BH ; SET ROW/COL
MOV CX,1 ; LENGTH OF STRING
MOV BL,07H ; WRITE ATTRIBUTE
MOV AX,1300H ; WRITE CHARACTER STRING REQUEST
INT 10H ; RUPT TO BIOS
;
; ----- GET THE LANDING ZONE
;
MOV AX,WORD PTR ED_HD1PM+12 ; GET LANDING ZONE
;
; ----- CONVERT LANDING ZONE TO DECIMAL ASCII & PRINT
;
CALL ED_CVDA ; CONVERT TO ASCII
;
MOV AH,0FH ; REQUEST CURRENT VIDEO MODE
INT 10H ; RUPT TO BIOS
;
LEA BP,ED_WORKA ; ES:BP POINT TO WORK AREA
MOV DX,0839H ; SET ROW/COL
MOV CX,4 ; LENGTH OF STRING
MOV BL,07H ; WRITE ATTRIBUTE
MOV AX,1300H ; WRITE CHARACTER STRING REQUEST
INT 10H ; RUPT TO BIOS
;
; ----- GET SECTORS/TRACK
;
MOV AL,BYTE PTR ED_HD1PM+14 ; GET SECTORS/TRACK
MOV AH,0 ; CLEAR AH
;
; ----- CONVERT SECTORS/TRACK TO DECIMAL ASCII & PRINT
;
CALL ED_CVDA ; CONVERT TO ASCII
;
MOV AH,0FH ; REQUEST CURRENT VIDEO MODE
INT 10H ; RUPT TO BIOS
;
LEA BP,ED_WORKA+2 ; ES:BP POINT TO WORK AREA
MOV DX,093BH ; SET ROW/COL
MOV CX,2 ; LENGTH OF STRING
MOV BL,07H ; WRITE ATTRIBUTE
MOV AX,1300H ; WRITE CHARACTER STRING REQUEST
INT 10H ; RUPT TO BIOS
;
ED_EXIT:
MOV AH,4CH ; RETURN TO CALLER
INT 21H
ED_LDP ENDP
ED_CVDA PROC NEAR ; CONVERT BINARY IN AX TO ASCII DEC
PUSH BX ; SAVE BX REG
PUSH DX ; SAVE DX REG
PUSH SI ; SAVE SI REG
MOV WORD PTR ED_WORKA+0,' ' ; CLEAR THE
MOV WORD PTR ED_WORKA+2,' ' ; WORK AREA
LEA BX,ED_WORKA+3 ; GET ADDRESS OF WORK AREA
MOV SI,10 ; GET DIVISOR, BASE 10
ED_CVDAL:
SUB DX,DX ; CLEAR DIVIDEND
DIV SI ; DIVIDE BY 10
ADD DL,'0' ; MAKE ASCII
MOV ES:[BX],DL ; SAVE THE CHARACTER
DEC BX ; BACK UP THROUGH WORK AREA
CMP AX,0 ; DONE ?
JNE ED_CVDAL ; ...NO - LOOP
;
POP SI ; RESTORE SI REG
POP DX ; RESTORE DX REG
POP BX ; RESTORE BX REG
RET ; RETURN TO CALLER
ED_CVDA ENDP
ED_CVHA PROC NEAR ; CONVERT BINARY IN AX TO ASCII DEC
PUSH BX ; SAVE BX REG
PUSH AX ; SAVE A COPY OF AX
LEA BX,ED_HEXTT ; GET ADDRESS OF XLAT TABLE
AND AL,0FH ; ISOLATE LOW ORDER NIBBLE
XLAT ED_HEXTT ; CONVERT TO ASCII
MOV ED_WORKA+3,AL ; PUT IN OUTPUT AREA
;
POP AX ; GET AX BACK
SHR AL,4 ; ISOLATE HIGH ORDER NIBBLE
XLAT ED_HEXTT ; CONVERT TO ASCII
MOV ED_WORKA+2,AL ; PUT IN OUTPUT AREA
;
MOV AL,AH ; GET HIGH BYTE
AND AL,0FH ; ISOLATE LOW ORDER NIBBLE
XLAT ED_HEXTT ; CONVERT TO ASCII
MOV ED_WORKA+1,AL ; PUT IN OUTPUT AREA
;
MOV AL,AH ; GET HIGH BYTE
SHR AL,4 ; GET HIGH NI
XLAT ED_HEXTT ; CONVERT TO ASCII
MOV ED_WORKA+0,AL ; PUT IN OUTPUT AREA
;
POP BX ; RESTORE AX
RET ; RETURN TO CALLER
ED_HEXTT DB '0123456789ABCDEF'
ED_CVHA ENDP
CLS
INT 20H ; RETURN TO DOS
CSEG ENDS ; END OF CODE SEG
END TST_START